Saltar al contenido principal

Revisión de useState, useRef, useEffect

Cuando trabajas con React, te encontrarás frecuentemente con tres hooks fundamentales: useState, useRef, y useEffect. Estos hooks son herramientas clave que te permiten gestionar el estado, interactuar con referencias a elementos del DOM, y controlar efectos secundarios en tus componentes de React. En esta sección, revisaremos cada uno de estos hooks con ejemplos claros para que puedas entender cómo y cuándo utilizarlos.

useState: Gestión del Estado​

useState es el hook que te permite añadir estado a un componente funcional. Esto es especialmente útil cuando necesitas que tu componente recuerde alguna información entre renderizados.

Ejemplo Básico de useState​

Imagina que estás construyendo un contador que se incrementa cada vez que haces clic en un botón:

import React, { useState } from 'react';

function Contador() {
// Declaración de una variable de estado llamada "contador" y una función para actualizarla
const [contador, setContador] = useState(0);

return (
<div>
<p>Has hecho clic {contador} veces</p>
<button onClick={() => setContador(contador + 1)}>
Incrementar
</button>
</div>
);
}

export default Contador;

¿Qué está pasando aquí?

  • useState(0) inicializa el estado contador con un valor de 0.
  • setContador es la función que usas para actualizar ese estado.
  • Cada vez que el botón es clicado, setContador incrementa el valor de contador.

Conceptos Clave​

  • Inicialización del estado: useState siempre debe ser llamado con un valor inicial.
  • Renderización: Cada vez que cambias el estado, el componente se renderiza de nuevo mostrando el estado actualizado.

useRef: Referencias a Elementos y Valores Persistentes​

useRef se utiliza para crear referencias a elementos del DOM o para almacenar valores que quieres que persistan entre renderizados sin causar una nueva renderización del componente.

Ejemplo Básico de useRef​

Considera un caso donde quieres enfocar un input de texto automáticamente cuando se carga el componente:

import React, { useRef, useEffect } from 'react';

function EnfocarInput() {
const inputRef = useRef(null);

useEffect(() => {
// Enfocar el input cuando el componente se monta
inputRef.current.focus();
}, []);

return <input ref={inputRef} type="text" />;
}

export default EnfocarInput;

¿Qué está pasando aquí?

  • useRef(null) crea una referencia que inicialmente es null.
  • inputRef.current accede al elemento DOM actual.
  • El input es enfocado automáticamente al montar el componente gracias a useEffect.

Conceptos Clave​

  • Persistencia de valores: useRef no causa que el componente se renderice nuevamente cuando el valor de la referencia cambia.
  • Acceso al DOM: useRef es una manera común de interactuar directamente con los elementos del DOM.

useEffect: Efectos Secundarios y Ciclo de Vida​

useEffect se utiliza para manejar efectos secundarios en tus componentes, como operaciones de red, suscripciones, o manipulación directa del DOM que necesitan ocurrir después de que un componente se haya renderizado.

Ejemplo Básico de useEffect​

Imagina que quieres cambiar el título del documento del navegador cada vez que el contador cambia:

import React, { useState, useEffect } from 'react';

function ContadorConTitulo() {
const [contador, setContador] = useState(0);

useEffect(() => {
document.title = `Clics: ${contador}`;
}, [contador]); // Solo ejecutar el efecto cuando "contador" cambie

return (
<div>
<p>Has hecho clic {contador} veces</p>
<button onClick={() => setContador(contador + 1)}>
Incrementar
</button>
</div>
);
}

export default ContadorConTitulo;

¿Qué está pasando aquí?

  • useEffect se ejecuta después de cada renderización, actualizando el título del documento.
  • El segundo argumento [contador] es una lista de dependencias que indica cuándo debe ejecutarse el efecto. En este caso, solo se ejecutará cuando contador cambie.

Conceptos Clave​

  • Efectos dependientes: Usa el segundo argumento de useEffect para controlar cuándo se ejecuta.
  • Limpieza de efectos: Si un efecto necesita limpiar recursos (por ejemplo, cancelar una suscripción), puedes retornar una función dentro de useEffect.

Más información​

  • Estado y ciclo de vida en React
  • Referencias al DOM en React
  • Efectos secundarios y su gestión en componentes funcionales

Resumen​

En esta sección, hemos revisado tres hooks esenciales de React: useState para la gestión del estado, useRef para mantener referencias y valores persistentes sin renderizar, y useEffect para manejar efectos secundarios y controlar el ciclo de vida de los componentes. Cada uno de estos hooks es fundamental para construir componentes dinámicos y reactivos, permitiéndote crear aplicaciones interactivas y eficientes.